package com.group2.operations.service;

import com.group2.operations.model.ProcessState;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.runtime.ProcessInstance;

import java.util.Date;
import java.util.List;
import java.util.Map;

public interface FlowService {
    /**
     * 开启流程
     * @param variables 传递变量
     * @param processId 流程ID
     * @return Process实例
     */
    ProcessInstance startProcess(Map<String, Object> variables, String processId);

    /**
     * 根据用户名查询流程实例
     * @param username 用户名
     * @return 流程实例列表
     */
    List<HistoricProcessInstance> queryProcessByUserName(String username);

    /**
     * 完成流程的第一个任务
     * @param username 用户名
     * @param taskName 任务名
     * @param processId 流程ID
     * @param processName 流程名
     * @param startTime 开始时间
     */
    void completeFirstTask(String username, String taskName, String processId, String processName, Date startTime);

    /**
     * 判断一个流程是否完成
     * @param processId 流程ID
     * @return
     */
    boolean isFinished(String processId);

    /**
     * 获取一个流程的所有历史事件
     * @param processId 流程ID
     * @return
     */
    ProcessState getHistory(String processId);

    /**
     * 判断一个用户是否已发起申请代理商流程
     * @param username 用户名
     * @return
     */
    boolean hasApplied(String username);

    /**
     * 判断一个用户是否已发起改变某厅店状态的申请
     * @param username 用户名
     * @param sid 厅店ID
     * @return
     */
    boolean haAppliedToChangeState(String username, int sid);
}
